const crypto = require('crypto');
const bcrypt = require('bcryptjs'); // 目的增强数据安全性 不可逆加密，无法通过解密得到明文

module.exports.md5 = (string) => {
  const hash = crypto.createHash('md5');
  hash.update(string);
  const result = hash.digest('hex');
  return result;
};

/**
 * 同步加密
 * @param { String } string 要加密字符串
 * @param { String | Number } salt 要生成或使用盐长度，默认为10
 * @returns { String } 生成哈希加密字符串
 */
module.exports.Hash = (string, salt = 10) => {
  salt = bcrypt.genSaltSync(10); // 随机字符串
  const hash = bcrypt.hashSync(string, salt); // 加密
  return hash;
};

/**
 * 比较
 * @param { String } string 要比较字符串
 * @param { String } hash 要测试hash加密字符串
 * @returns { Boolean } 匹配则返回true,否则false
 */
module.exports.ComHash = (string, hash) => {
  const result = bcrypt.compareSync(string, hash);
  return result;
};
